const express = require('express')
const router = express.Router()
const User = require('../models/User')
const { getUserInfo } = require('../utils/permission')
const Token = require('../utils/token')
const CryptoJS = require('crypto-js')

// router.get('/code/:phone', (req, res) => {
//   const { phone } = req.params
//   const code = Math.random().toString().slice(2).slice(-4).padStart(4, '0')
//   User
//     .find({ phone }, {__v: false})
//     .then(data => {
//       if (data.length) {
//         // 有用户，保存验证码到数据库
//         User
//           .updateOne({phone}, {code})
//           .then(() => {
//             res.json({
//               code: 200,
//               data: {
//                 code
//               }
//             })
//           })
//       } else {
//         // 没有用户，创建新用户，并保存验证码到数据库
//         new User({phone, code, avatarUrl: 'https://joeschmoe.io/api/v1/random', scores: 999, nickname: '白丁用户'})
//           .save()
//           .then(() => {
//             res.json({
//               code: 200,
//               data: {
//                 code
//               }
//             })
//           })
//       }
//     })
// })

/**
 * 用户使用验证码登录
 */
router.post('/code', (req, res) => {
  const { phone, code } = req.body
  User
    .find({phone}, {__v: false})
    .then(data => {
      if (data.length) {
        // 有用户，比较验证码
        const user = data[0]
        if (code === user.code) {
          const payload = {
            phone,
          }
          const token = Token.generateToken(payload)
          User
            .updateOne({phone}, {code: Math.random().toString(), token})
            .then(() => {
              res.json({
                code: 200,
                data: {
                  status: 200,
                  message: '登录成功',
                  // userInfo: { ...payload },
                  token,
                },
                message: ''
              })
            })
            .catch(() => {
              res.json({
                code: 200,
                data: {
                  status: 500,
                  message: '服务器异常...'
                }
              })
            })
        } else {
          res.json({
            code: 200,
            data: {
              status: 404,
              message: '验证码有误'
            }
          })
        }
      } else {
        res.json({
          code: 200,
          data: {
            status: 404,
            message: '验证码有误'
          }
        })
      }
    })
})

/**
 * 使用账号密码登录
 */
router.post('/account', (req, res) => {
  const { account, password } = req.body
  User
    .findOne({
      $and: [
        {$or: [{phone: account}, {username: account}]},
        {password: CryptoJS.MD5(password).toString()},
      ]
    })
    .then(user => {
      if (user) {
        // 有用户
        const payload = {
          phone: user.phone,
        }
        const token = Token.generateToken(payload)
        User
          .updateOne({phone: user.phone}, {token})
          .then(() => {
            res.json({
              code: 200,
              data: {
                status: 200,
                message: '登录成功',
                token,
              },
              message: ''
            })
          })
          .catch(() => {
            res.json({
              code: 200,
              data: {
                status: 500,
                message: '服务器异常...'
              }
            })
          })
      } else {
        res.json({
          code: 200,
          data: {
            status: 404,
            message: '用户名或密码错误'
          }
        })
      }
    })
})

/**
 * 用户退出
 */
router.delete('/', (req, res) => {
  const user = getUserInfo(req)
  User
    .updateOne({phone: user?.phone}, {token: ''})
    .then(() => {
      res.json({
        code: 200,
        data: {
          status: 200,
          message: '用户已退出!'
        }
      })
    })
    .catch(() => {
      res.json({
        code: 200,
        data: {
          status: 200,
          message: '用户已退出!'
        }
      })
    })
})

// /**
//  * 根据 token 获取用户信息
//  */
// router.get('/', (req, res) => {
//   const token = req.get('authorization')?.replace('Bearer ', '')
//   User
//     .find({ token })
//     .then(data => {
//       if (data.length === 1) {
//         const user = getUserInfo(req)
//         const userInfo = { ...user }
//         delete userInfo.exp
//         res.json({
//           code: 200,
//           data: {
//             userInfo
//           }
//         })
//       } else {
//         res.json({
//           code: 200,
//           data: {
//             userInfo: null,
//             message: '用户未登录!'
//           }
//         })
//       }
//     })
// })

module.exports = router
